NITRO世代(C5、M5)へのEC2インスタンスタイプ変更を試してみた(Amazon Linux編) #reinvent
西澤です。
re:Invent 2017で新しいアーキテクチャーが発表されたC5、M5等のNITRO世代EC2インスタンスでは、新しいHypervisorが採用され、仮想化のオーバーヘッドをより小さくすることに成功しているそうです。
- 今すぐご利用可能 – Amazon EC2 コンピューティング最適化インスタンス C5 | Amazon Web Services ブログ
- M5 – 次世代の汎用EC2インスタンス | Amazon Web Services ブログ
当然積極的に利用したくなるわけですが、アーキテクチャーに変更がある関係で、少し注意して利用する必要があるようなので、それを確認しつつ、Amazon Linuxで試してみることにしました。
NITRO世代利用時の前提条件
C5、M5インスタンスを利用する場合には、"ENAおよびNVMe用のドライバを含むHVM AMIが必要"であることに注意しましょう。
NVMeドライバ
NVMeドライバについては、kernel 3.19以降で組み込まれているようです。Amazon Linuxでは、比較的新しいKernelが採用されているので、新しい世代であれば問題はなさそうです。
遡って確認してみたところ、Amazon Linuxでは、2015.09のバージョンから、kernel 4.1.17が採用されており、それ以降のイメージを利用していれば問題は無さそうです。
2015.09よりも前のイメージのAmazon Linuxをご利用の場合、kernelのアップデートが必要となります。
ENA有効化
ENA有効化についての確認、変更手順については、下記の公式ドキュメントに詳しく記載されています。
まず、そもそもAMIまたはEC2の設定としてのEnaSuppport
が有効となっているかどうかについて注意が必要です。下記の結果をご確認いただくとわかりますが、EnaSupport
が有効となったのは、2016.09のイメージからですので、それ以前のAMIから起動したAmazon Linuxはこれが無効となっています。
### amzn-ami-hvm-2016.09.0.20160923-x86_64-gp2 $ AMIID=ami-b04e92d0 $ aws ec2 describe-images --image-id $AMIID --query 'Images[].EnaSupport' [ true ]
### amzn-ami-hvm-2016.03.3.x86_64-gp2 $ AMIID=ami-f303fb93 $ aws ec2 describe-images --image-id $AMIID --query 'Images[].EnaSupport' []
2016.03のAMIからM5を利用する
EnaSupport
が有効となっていないAMIからM5を利用することはできないのでしょうか?まずは、AWS Management Consoleから起動を試してみます。
そもそもM5を選択することができませんでした。
それでは、一旦他のインスタンスタイプで起動してから変更ならできるかな?と試してみました。確かにインスタンスタイプの変更まではできるのですが、いざ、M5に変更済のインスタンスを起動しようとすると、、、
やはり起動ができませんでした。
そこで、EnaSupport
の設定を今回はAWS CLIから変更してみました。設定をする際には、EC2インスタンスが停止している必要があります。
$ IID=i-0123456789012345678 ### 事前確認 $ aws ec2 describe-instances \ --instance-ids $IID \ --query 'Reservations[].Instances[].EnaSupport' [] ### 変更 $ aws ec2 modify-instance-attribute \ --instance-id $IID \ --ena-support (空) ### 事後確認 $ aws ec2 describe-instances \ --instance-ids $IID \ --query 'Reservations[].Instances[].EnaSupport' [ true ]
この設定だけ行えば、無事に2016.03でM5インスタンスを利用することができました。
ちなみに、ENAドライバのバージョンについては、以下となっていました。
$ modinfo ena filename: /lib/modules/4.4.11-23.53.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 0.6.6 license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 3141E47566402C79D6B8284 alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: intree: Y vermagic: 4.4.11-23.53.amzn1.x86_64 SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int) parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable) 0 - Automatically choose according to device capability (default) 1 - Don't push anything to device memory 3 - Push descriptors and header buffer to device memory (int) parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int) parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int) parm: numa_node_override_array:Numa node override map (array of int) parm: numa_node_override:Enable/Disable numa node override (0=disable) (int)
前述のところでご紹介しました公式ドキュメント内には、0.6.6が最小推奨バージョンとの記載がありましたので、ギリギリ要件を満たしているようでした。2016.03よりもさらに古いインスタンスをご利用の場合には、ENAドライバのバージョンもご確認をいただき、バージョンアップ対応をしておいた方が望ましいと思います。ENAドライバのバージョンアップについては、下記記事を参考にしていただければと思います。
まとめ
Amazon Linuxで、NITRO世代(C5、M5)のインスタンスを利用するときは、以下を確認しましょう。
- 2015.09以降であれば、NVMeドライバはOK、それより前ならkernelアップデート
- 2016.09以降であれば、ENA有効なのでOK、それより前ならENA有効化と必要に応じてENAドライバのバージョンアップが必要
他のOSのパターンも検証してみようと思います。
どこかの誰かのお役に立てば嬉しいです。